Options handling

간단한 옵션 처리
case와 switch를 이용한 옵션 처리
#!/bin/bash
echo
while [ -n "$1" ]; do
case "$1" in
-a) echo "Found the -a option";;
-b) echo "Found the -b option";;
-c) echo "Found the -c option";;
*) echo "$1 is not an option";;
esac
shift
done
매개변수에서 옵션 분리하기
종종 스크립트에서 옵션과 매개변수를 같이 사용할 때가 있다.
리눅스에서 표준적으로 특별할 문자 코드로 둘을 불리해서 옵션이 끝나는 위치와 매개변수가 시작되는 위치를 지시한다.

리눅스에서 표준적으로 이중대시(--)를 이용해서 쉘 옵션 목록의 끝임을 표시한다.
#!/bin/bash
echo
while [ -n "$1" ]; do
case "$1" in
-a) echo "Found the -a option";;
-b) echo "Found the -b option";;
-c) echo "Found the -c option";;
--)
shift
break;;
*) echo "$1 is not an option";;
esac
shift
done
count=1
for param in $@; do
echo "Parameter #$count=$param"
count=$[ $count + 1 ]
done
옵션의 값 처리하기
일부 옵션은 매개변수를 요구한다.(옵션에 대한 매개변수)
#!/bin/bash
echo
while [ -n "$1" ]; do
case "$1" in
-a) echo "Found the -a option";;
-b)
param="$2"
echo "Found the -b option, with parameter value $param"
shift;;
-c) echo "Found the -c option";;
--)
shift
break;;
*) echo "$1 is not an option";;
esac
shift
done
count=1
for param in "$@"; do
echo "Parameter #$count: $param"
count=$[ $count + 1 ]
done
getopt & getopts 명령

getopt
getopt는 어떤 형식으로 되어있던지 커맨드라인 옵션 및 매개변수의 목록을 받아서 적절한 형식으로 자동 변환한다.
getopt optstring parameters
getopt -q # getopt
getopt ab:cd -a -b test1 -cd test2 test3
~ » getopt ab:cd -a -b test1 -cd test2 test3                                                    csian@Bonita-MacBookPro
 -a -b test1 -c -d -- test2 test3
optstring에서 뒤에 " : "를 가지는 option은 매개변수를 필요로 하는 option임을 의미한다.
getopt in Shell Script
shell Script에서 형식적으로 옵션과 매개변수를 처리하기 위해 set 명령을 함께 사용한다.
#!/bin/bash
set -- $(getopt -q ab:cd "$@")
echo
while [ -n "$1"]; do
case "$1" in
-a) echo "Found the -a option";;
-b)
param="$2"
echo "Found the -b option, with parameter value $param"
shift;;
-c) echo "Found the -c option";;
--)
shift
break;;
*) echo "$1 is not an optioin";;
esac
shift
done
count=1
for param in "$@"; do
echo "Parameter #$count=$param"
count=$[ $count + 1 ]
done
getopt는 빈칸을 포함하는 따옴표로 묶인 파라미터에 대해서 빈 칸을 여전히 매개변수 구분자로 해석하고 이를 분리한다
getopts
getopt의 확장 기능을 내장하고 있다.

getopt는 모든 옵션과 매개변수에 대한 출력을 만들어내지만,
getopts는 존재하는 쉘 매개변수를 차례대로 처리한다.

variable에 현재 매개변수를 저장한다
getopts optstring variable
getopts는 아래 두개의 환경 변수를 이용해서 동작한다
OPTARG: 옵션이 매개변수 값을 요구하는 경우, 사용될 값을 포함
OPTIND: 매개변수 목록 안에서 getops가 중단된 위치의 값
#!/bin/bash
echo
while getopts :ab:c opt; do
case "$opt" in
a) echo "Found the -a option";;
b) echo "Found the -b option, with value $OPTARG";;
c) echo "Found the -c option";;
*) echo "Unknown option: $opt";; # '?'
esac
done
shift $[ $OPTIND -1 ]
echo
count=1
for param in "$@"; do
echo "Parameter $count: $param"
count=$[ $count + 1 ]
done
getopts의 optsting이 " : "으로 시작함은 getopt의 -q 옵션처럼 오류 메시지를 표시하지 않음을 의미힌다.
getopts는 getopt와 달리 case 변수($opt)는 대시(' - ')를 포함하지 않는다.

getopts는 getopt와 달리 띄어쓰기(따옴표로 둘러싼)을 포함할 수 있다
리눅스에서 주로 사용되는(통용되는) 옵션

-a

모든 개체 표시

-c

카운트

-d

디렉토리 지정

-e

개체 확장

-f

데이터 읽어들일 파일 지정

-h

도움말 메시지 표시

-i

텍스트 대소문자 무시

-l

출력의 긴 형식 버전

-n

비대화형 모드(일괄처리)

-o

모든 출력을 리다이렉트할 출력 파일 지정

-q

침묵 기록 모드에서 실행

-r

디렉토리와 파일을 재귀적으로 처리

-s

침목 기록 모드에서 실행

-v

상세한 출력을 생성

-x

개체를 제외

-y

모든 질문에 예(yes)로 답변